package com.indexingsystem.system.service;

import java.util.List;

import com.indexingsystem.boss.Vo.OrderExportOtherResQueryVo;
import com.indexingsystem.boss.Vo.OrderOtherResVo;
import com.indexingsystem.boss.Vo.OrderResultVo;
import com.indexingsystem.boss.Vo.ResourceCheckVo;
import com.indexingsystem.boss.Vo.ResourceRelationsReqVo;
import com.indexingsystem.boss.Vo.ResourceRelationsVo;
import com.indexingsystem.boss.Vo.ResourcesReqVo;
import com.indexingsystem.boss.Vo.ResourcesVo;
import com.indexingsystem.boss.Vo.StatusList;
import com.indexingsystem.boss.common.PagedResult;
import com.indexingsystem.boss.entity.AuditLogs;
import com.indexingsystem.boss.entity.DhResourceauditlogs;
import com.indexingsystem.boss.entity.ResourceInfo;
import com.indexingsystem.boss.entity.ResourceRelationInfo;
import com.indexingsystem.boss.entity.Resources;

public interface IResourceService {
	
	/**
	 * 获取资源未关联列表数据长度
	 * @param resourcesReqVo
	 * @return
	 */
	Integer getLeftResourceInfoCount(ResourcesReqVo resourcesReqVo);
	
	/**
	 * 获取资源未关联列表信息
	 * @param resourcesReqVo
	 * @return
	 */
	PagedResult<ResourceInfo> getLeftResourceInfo(ResourcesReqVo resourcesReqVo);
	
	/**
	 * 获取资源已关联列表信息长度
	 * @param resourcesReqVo
	 * @return
	 */
	Integer getRightResourceInfoCount(ResourceRelationsReqVo resourceRelationsReqVo);
	
	/**
	 * 获取资源已关联列表信息
	 * @param resourceRelationsReqVo
	 * @return
	 */
	PagedResult<ResourceRelationInfo> getRightResourceInfo(ResourceRelationsReqVo resourceRelationsReqVo);
	
	/**
	 * 建立资源关系
	 * @param resourceCheckVo
	 * @return
	 */
	int addRelation(List<ResourceCheckVo> resourceCheckVo);
	
	/**
	 * 撤销资源关系
	 * @param resourceCheckVo
	 * @return
	 */
	int deleteRelation(List<String> resourceCheckVo);

	/**
	 * 根据资源id删除资源.
	 * 
	 * @param resId
	 * @return
	 */
	int deleteByPrimaryKey(String resId) throws Exception;

	/**
	 * 新增资源.
	 * 
	 * @param record
	 * @return
	 */
	int insertSelective(Resources record) throws Exception;

	/**
	 * 通过资源id查询资源信息.
	 * 
	 * @param resId
	 * @return
	 */
	Resources selectByPrimaryKey(String resId);
	
	/**
	 * 通过资源类型id获取已关联资源类型的资源列表.
	 * @param resTypeId
	 * @return
	 */
	List<Resources> getResourcesListByResTypeId(String resTypeId);

	/**
	 * 修改资源.
	 * 
	 * @param record
	 * @return
	 */
	int updateByPrimaryKeySelective(Resources record) throws Exception;

	/**
	 * 分页查询资源列表.
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<ResourcesVo> selectResCategorsByResList(ResourcesVo resourcesVo);

	/**
	 * 分页查询资源列表.
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<ResourcesVo> selectMenusByResList(ResourcesVo resourcesVo);

	/**
	 * 获取资源总数量.
	 * 
	 * @return
	 */
	Integer getResourcesListCount();

	/**
	 * 通过资源分类id查询未关联的资源列表总数量.
	 * 
	 * @param resourcesVo
	 * @return
	 */
	Integer getResourcesByResCategoryIdListCount(ResourcesVo resourcesVo);

	/**
	 * 通过栏目id查询未关联的资源列表总数量.
	 * 
	 * @param resourcesVo
	 * @return
	 */
	Integer getResourcesByMenusIdListCount(ResourcesVo resourcesVo);

	/**
	 * 批量审核资源操作.
	 * 
	 * @param list
	 * @return
	 */
	Integer batchUpdateResourceWithList(List<AuditLogs> auditLogsList, List<StatusList> list,List<DhResourceauditlogs> dhResourceauditlogsList) throws Exception;

	/**
	 * 根据资源id，获取没有关联的资源列表及条件检索
	 * 
	 * @param resourcesVo
	 * @return
	 */

	PagedResult<ResourcesVo> selectResourcesListNoWithRelations(ResourcesVo resourcesVo);

	/**
	 * 根据资源id，获取有关联资源列表及条件检索
	 * 
	 * @param resourcesVo
	 * @return
	 */
	PagedResult<ResourcesVo> selectResourcesListWithRelations(ResourcesVo resourcesVo);

	/**
	 * 添加资源关系
	 * 
	 * @return
	 */
	Integer addResourceRelations(ResourcesVo firstVo, ResourcesVo secondVo) throws Exception;

	/**
	 * 移除资源关系
	 * 
	 * @return
	 */
	Integer removeResourceRelations(ResourceRelationsVo record) throws Exception;
	
	
    /**
     * 通过资源分类id和开始年份、结束年份、总数量限制获取非报刊资源类型订单列表.
     * @param orderOtherResVo
     * @return
     */
	List<OrderResultVo> getResourcesListByRescategorsIdOrYear(OrderOtherResVo orderOtherResVo);
	
	
	   /**
     * 通过订单资源分类id、开始年份、预定结束年份、预定个数限制获取非连续出版物类型资源列表.
     * @param orderExportOtherResQueryVo
     * @return
     */
    List<Resources>  getOrderOtherResourcesListByResCategoryId(OrderExportOtherResQueryVo orderExportOtherResQueryVo);
    
    /**
	 * 获取通过审核资源总数量.
	 * 
	 * @return
	 */
	Integer getResourcesListStatusCount();
	
	/**
	 * 通过订单中的期刊id获取所有有关联的文章列表.
	 * @param resId
	 * @return
	 */
	List<Resources> getOrderResourcesListByMagazinesId(String resId);

	
	/**
	 * 通过订单中的期刊id获取所有有关联的文章列表.
	 * @param resId
	 * @return
	 */
	List<Resources> getOrderResourcesListByMagazinesIdNew(ResourcesVo resourcesVo);
	
	/**
	 * 通过机构id查询订单资源
	 * @param list
	 * @return
	 */
	Integer getCharResourcesListCount(List<String> list);
}